# Python 网络编程


# socket 编程
# 网络编程的基础是 socket，它是网络通信的基石。
# socket 编程涉及到三个基本概念：
# 1. 套接字（Socket）：网络通信的端点，应用程序通常通过它与另一个应用程序或网络服务建立连接。
# 2. IP 地址（IP Address）：唯一标识网络上计算机的地址。
# 3. 端口号（Port Number）：应用程序在同一 IP 地址上运行时，使用的端口号。


# 套接字由两部分组成：
# 1. 协议类型：指定套接字的网络层协议，如 TCP、UDP、ICMP 等。
# 2. 套接字地址：包含 IP 地址和端口号的二元组。


# 套接字编程模型
# 套接字编程模型有两种：
# 1. 阻塞式 I/O 模型：应用程序发起 I/O 请求后，必须等待操作完成，才能继续运行。
# 2. 非阻塞式 I/O 模型：应用程序发起 I/O 请求后，可以继续运行，不必等待操作完成。


# 套接字类型
# 套接字有两种类型：
# 1. 流式套接字（Stream Socket）：提供面向连接的、可靠的、字节流服务。
# 2. 数据报式套接字（Datagram Socket）：提供无连接的、不可靠的、数据报服务。


# 网络编程主要模块
# Python 提供了以下模块来实现网络编程：
# 1. socket 模块：提供 socket 接口，可以用来创建套接字，绑定 IP 地址和端口号，接收和发送数据。
# 2. socketserver 模块：提供 SocketServer 类，可以简化网络服务器的开发。
# 3. select 模块：提供 I/O 多路复用功能，可以监控多个套接字，并根据 I/O 事件进行相应的处理。
# 4. asyncore 模块：提供异步 I/O 处理功能，可以处理非阻塞式 I/O 模型。
# 5. asynchat 模块：提供支持多线程的异步 I/O 模型。


# 套接字接口
# Python 提供了 socket 模块，它提供了 socket 接口，可以用来创建套接字，绑定 IP 地址和端口号，接收和发送数据。
# 套接字接口常用函数
# 1. socket()：创建套接字。
# 2. bind()：绑定 IP 地址和端口号。
# 3. listen()：开始监听连接。
# 4. accept()：接收来自其他套接字的连接。
# 5. connect()：连接到远程套接字。
# 6. recv()：接收数据。
# 7. send()：发送数据。
# 8. close()：关闭套接字。
# 9. settimeout()：设置套接字超时时间。
# 10. gettimeout()：获取套接字超时时间。
# 11. getpeername()：获取套接字对端(远程主机)的地址。
# 12. getsockname()：获取本地套接字的地址。